x86: Add TLB flushing to HAP p2m changes
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 20 Oct 2008 15:49:25 +0000 (16:49 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 20 Oct 2008 15:49:25 +0000 (16:49 +0100)
Removing an MFN from the p2m requires it to be flushed from the
guest's TLBs on HAP, like we do when we're using shadows.

Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>
xen/arch/x86/mm/hap/hap.c

index 2556a6ea9e531ea37a3a2e4abed6a8d7f5718346..e063e086d8179b3050f71f2ceea8b5874d146a26 100644 (file)
@@ -639,9 +639,16 @@ static void
 hap_write_p2m_entry(struct vcpu *v, unsigned long gfn, l1_pgentry_t *p,
                     mfn_t table_mfn, l1_pgentry_t new, unsigned int level)
 {
+    uint32_t old_flags;
+
     hap_lock(v->domain);
 
+    old_flags = l1e_get_flags(*p);
     safe_write_pte(p, new);
+    if ( (old_flags & _PAGE_PRESENT)
+         && (level == 1 || (level == 2 && (old_flags & _PAGE_PSE))) )
+             flush_tlb_mask(v->domain->domain_dirty_cpumask);
+
 #if CONFIG_PAGING_LEVELS == 3
     /* install P2M in monitor table for PAE Xen */
     if ( level == 3 )